package com.example.mvc

import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.mvc.model.ProgramAdviser

class MainActivity : AppCompatActivity() {
    // 1. 声明界面控件
    private lateinit var dynamicContainer: LinearLayout  // 存放动态TextView的容器
    private lateinit var programInput: EditText         // 专业输入框
    private lateinit var resultText: TextView           // 查询结果显示
    private val programAdviser = ProgramAdviser()       // 初始化MVC的Model层
    private var textViewCount = 0                       // 记录动态TextView的数量

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 2. 加载布局文件（关联activity_main.xml）
        setContentView(R.layout.activity_main)

        // 3. 绑定布局中的控件（通过ID找到对应控件）
        dynamicContainer = findViewById(R.id.llDynamicContainer)
        programInput = findViewById(R.id.etProgram)
        resultText = findViewById(R.id.tvResult)
        val addButton: Button = findViewById(R.id.btnAddTextView)  // “添加文本”按钮
        val queryButton: Button = findViewById(R.id.btnQuery)      // “查询”按钮

        // 4. 给“添加文本”按钮设置点击事件（点击后添加动态TextView）
        addButton.setOnClickListener {
            addDynamicTextView()
        }

        // 5. 给“查询”按钮设置点击事件（点击后调用Model层获取推荐课程）
        queryButton.setOnClickListener {
            queryProgramCourses()
        }
    }

    // 6. 动态添加TextView的方法（带点击响应）
    private fun addDynamicTextView() {
        textViewCount++  // 每次添加前数量+1
        val dynamicTextView = TextView(this).apply {
            // 设置TextView的文本（引用字符串资源，符合实验要求）
            text = getString(R.string.textview_prefix) + " " + textViewCount
            // 设置文本大小
            textSize = 18f
            // 设置内边距（上下各16dp，避免文本太挤）
            setPadding(0, 16, 0, 16)
            // 设置布局参数（宽度占满屏幕，高度自适应）
            layoutParams = LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
            )
            // 7. 给动态TextView设置点击事件（点击弹出提示，解决“点击不灵敏”问题）
            setOnClickListener {
                Toast.makeText(
                    this@MainActivity,
                    "已点击：${getString(R.string.textview_prefix)} $textViewCount",
                    Toast.LENGTH_SHORT
                ).show()
            }
        }
        // 8. 将创建好的TextView添加到容器中（显示在界面上）
        dynamicContainer.addView(dynamicTextView)
    }

    // 9. 查询专业推荐课程的方法（MVC的Controller层逻辑）
    private fun queryProgramCourses() {
        // 获取输入框中的专业名称（去除前后空格）
        val inputProgram = programInput.text.toString().trim()
        // 调用Model层的方法，获取推荐课程（Controller不处理业务逻辑，只转发）
        val recommendedCourses = programAdviser.getRecommendedCourses(inputProgram)
        // 将结果显示到界面上（更新View层）
        resultText.text = getString(R.string.result_prefix) + recommendedCourses
    }
}